package com.onesports.intelligent.k12.polarlight.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 限流注解，也可用于防重复提交
 * @author aj
 */
@Target(value = {ElementType.PARAMETER, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface RedissonRateLimiter {
    /**
     * 是否限定ip
     *
     * @return
     */
    boolean conditionWithIp() default false;
    /**
     * 是否限定当前用户
     *
     * @return
     */
    boolean conditionWithCurrentLogin() default false;

    /**
     * 默认使用方法名加参数，
     * 值为true时，keys无意义
     * @return
     */
    boolean conditionWithMethodNParams() default true;
    /**
     * 业务键，支持Spel表达式
     * 此项生效，conditionWithMethodNParams必须为false
     * @return
     */
    String[] keys() default {};
    /**
     * 限制次数
     * @return
     */
    long limit() default 1;
    /**
     * 间隔/刷新窗口时间,单位毫秒
     *
     * @return
     */
    long interval() default 1000;
    /**
     * 请求等待时间,单位毫秒
     */
    long waiting() default 0;
}
